标签: sp-executesql

从 sp_executsql INSERT INTO 临时表

一般来说,我构建使用 sp_executsql 执行的动态 SQL 语句,如下所示:

EXEC sp_executesql @TempSQLStatement 
Run Code Online (Sandbox Code Playgroud)

我需要将返回结果行集插入某些内容(表变量或临时表),但出现以下错误:

Msg 208, Level 16, State 0, Line 1746
Invalid object name '#TempTable'.
Run Code Online (Sandbox Code Playgroud)

执行此操作后:

INSERT INTO #TempTable
EXEC sp_executesql @TempSQLStatement 
Run Code Online (Sandbox Code Playgroud)

根据我所读到的内容,我认为问题是由于我没有指定临时表的列而引起的,但我无法执行此操作,因为返回列数有所不同。

我读过我可以使用全局临时表,但我之前已经这样做过,想知道是否还有其他方法可以做到这一点。

t-sql temp-tables sp-executesql global-temp-tables

4
推荐指数
1
解决办法
1万
查看次数

MySQL中是否有类似于SQL Server中的sp_executesql的过程?

我想在我的程序中进行动态查询.SQL Server有针对此类任务的简洁sp_executesql过程,MySQL中有什么可以帮助我实现类似的功能吗?

mysql sql-server dynamic-sql sp-executesql

3
推荐指数
1
解决办法
4146
查看次数

'='sp_executesql附近的语法不正确

我需要delete所有rows的一些table where值是空字符串.(我有多个表有相似的名称).

我试着执行字符串中的那些sql语句:

DECLARE @sql AS NVARCHAR(MAX)
DECLARE @emptyValue AS NVARCHAR(1) =''    
set @sql = N'DELETE FROM SampleTable WHERE Value='+@emptyValue+''
exec sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)

但这让我错了 Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '='.

我试着弄清楚大约一个小时了.任何帮助,将不胜感激.

编辑: 这是删除最后一个配额后得到的内容.@tableNamenvarchar(MAX). 在此输入图像描述

sql t-sql sql-server sp-executesql

3
推荐指数
1
解决办法
2746
查看次数

更新语句中 SQL 中的动态列名

DECLARE @sql NVARCHAR(max)
DECLARE @ParmDefinition NVARCHAR(500)
SET @sql = 'UPDATE [Table1] SET [Table1].[@columnName] = TEST';
SET @ParmDefinition = N'@columnName NVARCHAR(50)';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'MyColumn';
Run Code Online (Sandbox Code Playgroud)

当我运行上述查询时,我得到Invalid column name '@columnName'.. 显然,在运行查询时不会替换列名。

实际上,我的@sql 变量要大得多,而且我有很多要更新的列,因此我想避免SET SQL =对列名的所有枚举进行操作。

我想声明一次 sql 字符串,并使用不同的值调用查询。例如:

EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'MyColumn';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'AnotherColumn';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'YetAnotherColumn';
-- And so on
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

sql-server sp-executesql

3
推荐指数
1
解决办法
1万
查看次数

将sp_executeSQL的参数值部分指定为参数

我正在使用SQL Server 2008 R2.我需要在下面的T-SQL的最后部分使用一个参数.

在这部分中,指定了sp_executesql的参数值,但我想动态提供它.

EXECUTE sp_executesql @sql,N'@startIndex1 int,@maxRows1 int',
                      @startIndex1 = @startIndex,@maxRows1 = @maxRows--LAST PART
Run Code Online (Sandbox Code Playgroud)

sql-server-2008-r2 sp-executesql

2
推荐指数
1
解决办法
1万
查看次数

sp_executesql中的命名参数

有没有什么方法可以调用sp_executesql参数不依赖于它们在商店中定义的顺序?与exec相同的查询效果很好,并且如果你有相同的顺序它也可以很好地工作,但是一个接一个地匹配参数是一件很痛苦的事情,因为有时候我会通过助手动态地生成调用,如果dto对象没有在相同的顺序中具有相同的字段,不能很好地工作.

create procedure ordertest
  @PARAM1 INT,
  @PARAM2 INT
  AS 
BEGIN
SELECT @PARAM1 AS ONE, @PARAM2 AS TWO
END

-- this works
EXEC ordertest @PARAM1 = 1, @PARAM2 = 2
exec sp_executesql N'exec ordertest @PARAM1, @PARAM2', N'@param1 int, @param2 int', @param2 = '2',  @param1 =  '1'
EXEC ordertest @PARAM2 = 2, @PARAM1 = 1

-- this doesn't work
exec sp_executesql N'exec ordertest @PARAM2, @PARAM1', N'@param1 int, @param2 int', @param2 = '2',  @param1 =  '1'
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sp-executesql dapper

2
推荐指数
1
解决办法
1101
查看次数

EXEC sp_executesql-从存储过程调用中捕获RETURN值和OUTPUT值

给定一个简单的存储过程,它将填充一个OUTPUT参数以及RETURN一个sa值,例如:

CREATE PROCEDURE sp_test 
(
    @param_out INT OUTPUT
)
AS BEGIN
    SELECT @param_out = 9
    RETURN 2
END
Run Code Online (Sandbox Code Playgroud)

如何使用sp_executesql并捕获这两个值来调用此过程?

我试过了:

DECLARE @ret INT, @param_out INT
EXEC SP_EXECUTESQL N'EXEC @ret = sp_test',
    N'@ret INT OUTPUT, @param_out INT OUTPUT',
    @ret OUTPUT,
    @param_out OUTPUT

SELECT @ret, @param_out
Run Code Online (Sandbox Code Playgroud)

但是,这抱怨@param_out没有提供:

过程或函数“ sp_test”需要未提供的参数“ @param_out”。

sql sql-server sp-executesql

2
推荐指数
1
解决办法
438
查看次数

使用sp_executesql在TSQL中执行非常长的语句

我想执行大约10,000个字符的动态SQL语句.

当我使用sp_executesql如下:

DECLARE @stmt varchar(MAX)

SET @stmt = 'xxxxxxxx.................' which is about 10,000 characters

EXEC sp_executesql @stmt
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

The character string that starts with '  select t1.e_reference xxxxxxxxxxx' is too long. Maximum length is 8000. 
Run Code Online (Sandbox Code Playgroud)

据我所知,我们可以使用sp_executesql来执行很长的语句,不是吗?

我使用的是SQL Server 2008企业版,64位.

我怎样才能做到这一点?谢谢.

t-sql sql-server sql-server-2008 sp-executesql

1
推荐指数
1
解决办法
1万
查看次数

使用EXECUTE sp_executesql在存储过程中设置变量

我正在尝试构建一个SQL字符串来执行,sp_executesql但我似乎无法为传入的sql字符串中的声明变量赋值.

以下是我的程序示例

ALTER PROCEDURE [dbo].[selectRecords]
@psID INT --parameter passed in
AS   
DECLARE @existingRecordCount INT=0

DECLARE @sql NVARCHAR(1000)
DECLARE @paramDefinitions NVARCHAR(1000)

SET @paramDefinitions=
    '@psID INT,    
    @existingRecordCount INT OUTPUT'

SET @sql='  
SELECT 
@existingRecordCount=COUNT(Name)
FROM dbo.Asset_Log
WHERE ID=@psID
GROUP BY Name'

EXECUTE sp_executesql @sql, @paramDefinitions, @psID, @existingRecordCount
Run Code Online (Sandbox Code Playgroud)

所以,我希望我的记录计数在@existingRecordCount变量中,但是我收到以下错误:

'OUPUT'附近的语法不正确.
必须声明标量变量"@existingRecordCount".

我究竟做错了什么?

提前致谢.我正在使用SQL Server 2008

variables stored-procedures sql-server-2008 sp-executesql

0
推荐指数
1
解决办法
3万
查看次数

使用Mysql中的executeUpdate通过sql语句创建表

我有以下内容doGet():

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        MysqlDataSource ds = new MysqlConnectionPoolDataSource();
        ds.setServerName("localhost");
        ds.setPort(3306);
        ds.setUser("root");
        ds.setPassword("");
        try {
            Connection connection = null ; 
            connection =  ds.getConnection();
            Statement statement = connection.createStatement();
            // create the DB .. 
            statement.executeUpdate("CREATE DATABASE IF NOT EXISTS "
                            +"testSQLtable" )  ;

            // use DB ..

            statement.executeUpdate("USE testSQLtable") ; 

            // create table ...
            statement.executeUpdate("DROP TABLE IF EXISTS  account "
                    +"CREATE TABLE  account ( "
                     +"accountNum INT( 11 ),"
                     +"dateCreated DATE NOT NULL," …
Run Code Online (Sandbox Code Playgroud)

java mysql sql create-table sp-executesql

0
推荐指数
1
解决办法
3万
查看次数