0
有没有办法从现有的表格生成TVP?我试过这个,https://dba.stackexchange.com/questions/12596/using-tables-as-table-valued-parameters-tvp但它显示我的语法错误?从现有表格动态生成TVP?
-- you would pass these two in as parameters of course:
DECLARE
@TableName SYSNAME = N'LocationTable',
@TypeName SYSNAME = N'LocationTypeTable';
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql + N',' + CHAR(13) + CHAR(10) + CHAR(9)
+ QUOTENAME(c.name) + ' '
+ s.name + CASE WHEN LOWER(s.name) LIKE '%char' THEN
'(' + CONVERT(VARCHAR(12), (c.max_length/
(CASE LOWER(LEFT(s.name, 1)) WHEN N'n' THEN 2 ELSE 1 END)) + ')'
ELSE '' END
-- need much more conditionals here for other data types
FROM sys.columns AS c
INNER JOIN sys.types AS s
ON c.system_type_id = s.system_type_id
AND c.user_type_id = s.user_type_id
WHERE c.[object_id] = OBJECT_ID(@TableName);
SELECT @sql = N'CREATE TYPE ' + @TypeName
+ ' AS TABLE ' + CHAR(13) + CHAR(10) + (' + STUFF(@sql, 1, 1, '')
+ CHAR(13) + CHAR(10) + ');';
PRINT @sql;
-- EXEC sp_executesql @sql;
我刚从链接中意识到他们正在使用冒险工作。我没有安装。针对adventureworks数据库运行此代码。另外,我做的更改就像缺少单引号和使用set为变量赋值。 – Joe
请仔细阅读该问题,我需要从现有表中获取TVP的syntex – user960567
您说上面的代码引发了错误。我为你修改了代码。您没有提供任何表格的名称,您尝试检索的参数。所以,抱歉,我无法读懂你的想法。 – Joe